home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / ole2book.zip / CHAP11.ZIP / CHAP11 / COSCHMOO / COSCHMOO.H < prev    next >
C/C++ Source or Header  |  1993-06-13  |  9KB  |  311 lines

  1. /*
  2.  * COSCHMOO.H
  3.  * Component Schmoo Chapter 8
  4.  *
  5.  * Single include file that pulls in everything needed for other source
  6.  * files in the Schmoo application.
  7.  *
  8.  * Copyright (c)1993 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Software Design Engineer
  11.  * Microsoft Systems Developer Relations
  12.  *
  13.  * Internet  :  kraigb@microsoft.com
  14.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  15.  */
  16.  
  17.  
  18. #ifndef _COSCHMOO_H_
  19. #define _COSCHMOO_H_
  20.  
  21. #include <windows.h>
  22. #include <memory.h>
  23. #include <ole2.h>
  24. #include <ole2ver.h>
  25. #include <bookguid.h>
  26. #include <ipoly6.h>
  27.  
  28. //These include files reference DLLs that don't have extern "C" already
  29. extern "C"
  30.     {
  31.     #include <commdlg.h>
  32.     }
  33.  
  34. #include <classlib.h>
  35. #include "resource.h"
  36.  
  37.  
  38.  
  39. //COSCHMOO.CPP:  Frame object that creates a main window
  40.  
  41. class __far CSchmooFrame : public CFrame
  42.     {
  43.     private:
  44.         HBITMAP         m_hBmpLines[5];     //Menu item bitmaps
  45.  
  46.         BOOL            m_fInitialized;     //CoInitialize work?
  47.  
  48.     protected:
  49.         //Overridable for creating a CClient for this frame
  50.         virtual LPCClient CreateCClient(void);
  51.  
  52.         //FRegisterAllClasses override unneccessary with Polyline DLL
  53.         virtual BOOL      FPreShowInit(void);
  54.         virtual UINT      CreateGizmos(void);
  55.  
  56.         virtual LRESULT   OnCommand(HWND, WPARAM, LPARAM);
  57.         virtual void      OnDocumentDataChange(LPCDocument);
  58.         virtual void      OnDocumentActivate(LPCDocument);
  59.  
  60.         //New for this class
  61.         virtual void      CreateLineMenu(void);
  62.  
  63.     public:
  64.         CSchmooFrame(HINSTANCE, HINSTANCE, LPSTR, int);
  65.         virtual ~CSchmooFrame(void);
  66.  
  67.         //Overrides
  68.         virtual BOOL      FInit(LPFRAMEINIT);
  69.         virtual void      UpdateMenus(HMENU, UINT);
  70.         virtual void      UpdateGizmos(void);
  71.  
  72.         //New for this class
  73.         virtual void      CheckLineSelection(UINT);
  74.     };
  75.  
  76.  
  77. typedef CSchmooFrame FAR * LPCSchmooFrame;
  78.  
  79.  
  80.  
  81.  
  82.  
  83. //CLIENT.CPP
  84.  
  85. /*
  86.  * The only reason we have a derived class here is to override
  87.  * CreateCDocument so we can create our own type as well as
  88.  * overriding NewDocument to perform one other piece of work once the
  89.  * document's been created.
  90.  */
  91.  
  92. class __far CSchmooClient : public CClient
  93.     {
  94.     protected:
  95.         //Overridable for creating a new CDocument
  96.         virtual LPCDocument CreateCDocument();
  97.  
  98.     public:
  99.         CSchmooClient(HINSTANCE);
  100.         virtual ~CSchmooClient(void);
  101.  
  102.         virtual LPCDocument NewDocument(BOOL, LPCDocumentAdviseSink);
  103.     };
  104.  
  105.  
  106. typedef CSchmooClient FAR * LPCSchmooClient;
  107.  
  108.  
  109.  
  110.  
  111. //DOCUMENT.CPP
  112.  
  113. class __far CPolylineAdviseSink : public IPolylineAdviseSink6
  114.     {
  115.     private:
  116.         LPVOID              m_pv;        //Customizable structure
  117.         ULONG               m_cRef;
  118.         LPUNKNOWN           m_punkOuter; //Unknown for delegation
  119.  
  120.     public:
  121.         CPolylineAdviseSink(LPVOID, LPUNKNOWN);
  122.         ~CPolylineAdviseSink(void);
  123.  
  124.         //IUnknown members
  125.         STDMETHODIMP         QueryInterface(REFIID, LPVOID FAR *);
  126.         STDMETHODIMP_(ULONG) AddRef(void);
  127.         STDMETHODIMP_(ULONG) Release(void);
  128.  
  129.         //Advise members.
  130.         STDMETHODIMP_(void) OnPointChange(void);
  131.         STDMETHODIMP_(void) OnSizeChange(void);
  132.         STDMETHODIMP_(void) OnColorChange(void);
  133.         STDMETHODIMP_(void) OnLineStyleChange(void);
  134.     };
  135.  
  136. typedef CPolylineAdviseSink FAR * LPCPolylineAdviseSink;
  137.  
  138.  
  139. /*
  140.  * The generic advisory interface.  This object controls it's own
  141.  * lifetime and the document becomes a user of the object with
  142.  * the last reference count.
  143.  */
  144.  
  145. class __far CImpIAdviseSink : public IAdviseSink
  146.     {
  147.     protected:
  148.         ULONG               m_cRef;      //Interface reference count.
  149.         LPVOID              m_pObj;      //Back pointer to the document
  150.         LPUNKNOWN           m_punkOuter; //Unknown for delegation
  151.  
  152.     public:
  153.         CImpIAdviseSink(LPVOID, LPUNKNOWN);
  154.         ~CImpIAdviseSink(void);
  155.  
  156.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  157.         STDMETHODIMP_(ULONG) AddRef(void);
  158.         STDMETHODIMP_(ULONG) Release(void);
  159.  
  160.         STDMETHODIMP_(void)  OnDataChange(LPFORMATETC, LPSTGMEDIUM);
  161.         STDMETHODIMP_(void)  OnViewChange(DWORD, LONG);
  162.         STDMETHODIMP_(void)  OnRename(LPMONIKER);
  163.         STDMETHODIMP_(void)  OnSave(void);
  164.         STDMETHODIMP_(void)  OnClose(void);
  165.     };
  166.  
  167.  
  168.  
  169. //Constant ID for the window polyline that lives in a document window
  170. #define ID_POLYLINE         10
  171.  
  172.  
  173. class __far CSchmooDoc : public CDocument, public IUnknown
  174.     {
  175.     friend class CPolylineAdviseSink;
  176.     friend class CImpIAdviseSink;
  177.  
  178.     //CHAPTER8MOD
  179.     //These need access to FQueryPasteFromData, FPasteFromData
  180.     friend class CDropTarget;
  181.     friend class CDropSource;
  182.     //End CHAPTER8MOD
  183.  
  184.     protected:
  185.         UINT                    m_uPrevSize;        //Last WM_SIZE wParam
  186.  
  187.         //Interface we use on the Polyline Object
  188.         LPPOLYLINE              m_pPL;
  189.         LPPERSISTSTORAGE        m_pIPersistStorage;
  190.  
  191.         //Interfaces we implement
  192.         LPPOLYLINEADVISESINK    m_pPLAdv;       //Polyline
  193.         LPADVISESINK            m_pIAdviseSink; //Standard for OnDataChange
  194.  
  195.         DWORD                   m_dwConn;       //Advisory connection
  196.         ULONG                   m_cRef;         //Document ref count
  197.  
  198.         //CHAPTER8MOD
  199.         class CDropTarget FAR *m_pDropTarget;  //Registered target.
  200.  
  201.         BOOL            m_fDragSource;      //Drag-drop source==target
  202.         //End CHAPTER8MOD
  203.  
  204.  
  205.     protected:
  206.         virtual BOOL    FMessageHook(HWND, UINT, WPARAM, LPARAM, LRESULT FAR *);
  207.  
  208.         //CHAPTER8MOD
  209.         virtual BOOL    FQueryPasteFromData(LPDATAOBJECT);
  210.         virtual BOOL    FPasteFromData(LPDATAOBJECT);
  211.         LPDATAOBJECT    TransferObjectCreate(void);
  212.         void            DropSelectTargetWindow(void);
  213.         //End CHAPTER8MOD
  214.  
  215.  
  216.     public:
  217.         CSchmooDoc(HINSTANCE);
  218.         virtual ~CSchmooDoc(void);
  219.  
  220.         //Since we implement multiple interfaces we need a controlling unknown
  221.         STDMETHODIMP         QueryInterface(REFIID, LPVOID FAR *);
  222.         STDMETHODIMP_(ULONG) AddRef(void);
  223.         STDMETHODIMP_(ULONG) Release(void);
  224.  
  225.         virtual BOOL     FInit(LPDOCUMENTINIT);
  226.         virtual void     Clear();
  227.  
  228.         virtual UINT     ULoad(BOOL, LPSTR);
  229.         virtual UINT     USave(UINT, LPSTR);
  230.  
  231.         virtual void     Undo(void);
  232.         virtual BOOL     FClip(HWND, BOOL);
  233.         virtual BOOL     FQueryPaste(void);
  234.         virtual BOOL     FPaste(HWND);
  235.  
  236.         virtual COLORREF ColorSet(UINT, COLORREF);
  237.         virtual COLORREF ColorGet(UINT);
  238.  
  239.         virtual UINT     LineStyleSet(UINT);
  240.         virtual UINT     LineStyleGet();
  241.     };
  242.  
  243. typedef CSchmooDoc FAR * LPCSchmooDoc;
  244.  
  245.  
  246. //These color indices wrap the polyline definitions
  247. #define DOCCOLOR_BACKGROUND             POLYLINECOLOR_BACKGROUND
  248. #define DOCCOLOR_LINE                   POLYLINECOLOR_LINE
  249.  
  250.  
  251.  
  252. //CHAPTER8MOD
  253. //Drag-drop interfaces we need in the document
  254.  
  255. class __far CDropTarget : public IDropTarget
  256.     {
  257.     protected:
  258.         ULONG               m_cRef;      //Interface reference count.
  259.         LPCSchmooDoc        m_pDoc;      //Back pointer to the document
  260.  
  261.         LPDATAOBJECT        m_pIDataObject;  //Data object from DragEnter
  262.  
  263.     public:
  264.         CDropTarget(LPCSchmooDoc);
  265.         ~CDropTarget(void);
  266.  
  267.         //IDropTarget interface members
  268.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  269.         STDMETHODIMP_(ULONG) AddRef(void);
  270.         STDMETHODIMP_(ULONG) Release(void);
  271.  
  272.         STDMETHODIMP DragEnter(LPDATAOBJECT, DWORD, POINTL, LPDWORD);
  273.         STDMETHODIMP DragOver(DWORD, POINTL, LPDWORD);
  274.         STDMETHODIMP DragLeave(void);
  275.         STDMETHODIMP Drop(LPDATAOBJECT, DWORD, POINTL, LPDWORD);
  276.     };
  277.  
  278.  
  279. typedef CDropTarget FAR * LPCDropTarget;
  280.  
  281.  
  282. class __far CDropSource : public IDropSource
  283.     {
  284.     protected:
  285.         ULONG               m_cRef;      //Interface reference count.
  286.         LPCSchmooDoc        m_pDoc;      //Back pointer to the document
  287.  
  288.     public:
  289.         CDropSource(LPCSchmooDoc);
  290.         ~CDropSource(void);
  291.  
  292.         //IDropSource interface members
  293.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  294.         STDMETHODIMP_(ULONG) AddRef(void);
  295.         STDMETHODIMP_(ULONG) Release(void);
  296.  
  297.         STDMETHODIMP QueryContinueDrag(BOOL, DWORD);
  298.         STDMETHODIMP GiveFeedback(DWORD);
  299.     };
  300.  
  301.  
  302. typedef CDropSource FAR * LPCDropSource;
  303.  
  304. //End CHAPTER8MOD
  305.  
  306.  
  307.  
  308.  
  309.  
  310. #endif //_COSCHMOO_H_
  311.